Keynote - Łukasz Langa (PyCon US 2022)
#PyCon_US_2022
Łukasz Langa氏 https://keybase.io/ambv
型ヒントは人間のためのもの(ドキュメンテーション)
人が読み、型チェッカも読む
型チェッカとの戦いではない
型ヒントで表した仮定を型チェッカーがチェックしてくれる
醜いコードには醜い型ヒントがある(ugly type annotations hint at ugly code)
型ヒントが醜かったらリファクタリングを考えよう(if your types are ugly consider refactoring)
読みやすい型ヒントについて共有
use modern typing syntax
3.9 組み込みgeneric型(typing.Listでなくてlistを使う)
3.10 Unionが | で書ける
standardize signature formatting
変数を使った型ヒント(Python最新バージョン対応!より良い型ヒントの書き方でも言及)
人にとって型ヒントを読みやすく
dispatch early to specialize
早期にdispatchし、サブファンクションを呼び出す
be flexible in what you accept but strict in what you emit
引数の型ヒントはvague
list? -> Iterableかも(tupleも渡せる)
返り値の型ヒントはconcrete
listを返す
But you should bend the rules
ジェネレータ関数の型ヒントはIterator[Foo]
ファイルライクオブジェクトの型ヒントはIO[Text]
mismatch
one variable one type
同じタイプを再代入
型が違うなら新しい変数にする
読みやすくなり、デバッグもしやすくなる
nominal vs structural typing
structural:Pythonのダックタイピング
nominalにもよさはある
TODO 単なるstringもIterable[str]
object vs Any
Further reading
TypedDict
NewType(2つの変数がstrを指していても型チェッカは同じでないと認識する)
Protocols
Self type
Varlance in collections (LT 5minで)
Liskov Substitution Principles(リスコフの置換原則)
https://youtu.be/wbohVjhqg7c